﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

using System.Security.Authentication;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;

using PEMS.Common;

namespace PEMS.Server
{
    /// <summary>
    /// adatok tárolására szolgáló singleton osztály
    /// </summary>
    public sealed class Intezmeny
    {
        #region Variables

        /// <summary>
        ///  a személyek listája, akik regisztrálva vannak a PEMS-ben
        /// </summary>
        public SerializableDictionary<string, Ember> emberList { get; set; }

        /// <summary>
        ///  az intézmény tárgyainak listája
        /// </summary>
        public SerializableDictionary<string, Targy> targyList { get; set; }

        /// <summary>
        ///  az intézmény féléveinek listája
        /// </summary>
        public SerializableDictionary<string, Felev> felevList { get; set; }

        /// <summary>
        ///  a szervíz által hitelesített kliensek leírásait itt tároljuk
        ///  azaz, akik sikeresen bejelentkeztek
        /// </summary>
        public Dictionary<string, N_1> authenticated { get; set; }

        public static readonly Object _lock = new Object();

        private static Intezmeny _instance = null;

        //public static int counter = 0;

        #endregion

        private Intezmeny()
        {
            emberList = new SerializableDictionary<string, Ember>();

            targyList = new SerializableDictionary<string, Targy>();

            felevList = new SerializableDictionary<string, Felev>();

            authenticated = new Dictionary<string, N_1>();

            Log.logToFile("XXXXXXXXXXX Intezmeny konstruktor XXXXXXXXXXXX", false);
        }

        #region Properties
        /// <summary>
        ///  az egyke Data legyártása (egyszer, (lock alatt)) és a példány visszaadása
        /// </summary>
        public static Intezmeny instance
        {
            get
            {
                lock (_lock)
                {
                    if (_instance == null)
                    {
                        _instance = new Intezmeny();
                    }
                }

                return _instance;
            }
        }

        #endregion


        /// <summary>
        ///  egy új félév elkészítése az intézményhez
        /// </summary>
        public void felev_gyartas()
        {
            //egy félév létrehozása
            Felev felev = new Felev();
            felev.id = "12/13";
            felev.megnevezes = "2012/13 tavaszi szemeszter";
            felev.kezdoDatum = DateTime.Parse("2013.02.01");
            felev.vegDatum = DateTime.Parse("2013.05.31");
            felev.aktualis = true;

            //a félév felvétele az intézmény tárolójába
            felevList.Add(felev.id, felev);

        }

        /// <summary>
        ///  egy új tárgy elkészítése az intézményhez
        /// </summary>
        public void targy_gyartas()
        {
            //egy tárgy legyártása
            Targy targy = new Targy();
            targy.id = "rfke";
            targy.megnevezes = "Rendszerfejlesztes korszeru eszkozei";

            targyList.Add(targy.id, targy);
        }

        /// <summary>
        ///  új ember elkészítése az intézményhez
        /// </summary>
        public void ember_gyartas()
        {
            //emberek létrehozása
            Hallgato hallgato = new Hallgato("h1");
            hallgato.password = "hh";
            hallgato.active = true;
            emberList.Add("h1", hallgato);

            hallgato = new Hallgato("h2");
            hallgato.password = "hh";
            hallgato.active = true;
            emberList.Add("h2", hallgato);

            Admin admin = new Admin("a1");
            admin.password = "aa";
            admin.active = true;
            emberList.Add("a1", admin);

            Tanar tanar = new Tanar("t1");
            tanar.password = "tt";
            tanar.active = true;
            emberList.Add("t1", tanar);
        }

    }
}